package model

import (
	_ "github.com/jinzhu/gorm"
)

type Model struct {
	Id          int    `gorm:"column:id;primary_key;size:36;" json:"id"`
	CreateTime  string `gorm:"column:create_time;index;" json:"create_time"`
	UpdateTime  string `gorm:"column:update_time;index;" json:"update_time"`
	DeletedTime string `gorm:"column:delete_time;index;" json:"deleted_time"`
}

// backend后台admin_role
type AdminRoleModel struct {
	Model
	AdminId int `json:"admin_id"`
	RoleId  int `json:"role_id"`
}

func (AdminRoleModel) TableName() string {
	return "admin_role"
}

// backend后台menu
type MenuModel struct {
	Model
	Name       string  //菜单名字
	Sort       int     //排序规则
	Icon       *string //菜单图标
	Router     *string //访问路由
	ParentId   *string //父级id
	ParentPath *string //父级路径
	ShowStatus int     //显示状态1:显示 2:隐藏
	Status     int     //状态1:启用 2:禁用
	Desc       *string //备注
	Creator    string  //
}

func (MenuModel) TableName() string {
	return "menu"
}

// backend后台role_menu
type RoleMenuModel struct {
	Model
	RoleId   int `json:"role_id"`
	MenuId   int `json:"menu_id"`
	ActionId int `json:"action_id"`
}

func (RoleMenuModel) TableName() string {
	return "role_menu"
}

// backend后台menu_action_resource
type MenuActionResourceModel struct {
	Model
	ActionId string // 菜单动作id
	Method   string // 资源请求方式(支持正则)
	Path     string // 资源请求路径(支持/:id匹配)
}

func (MenuActionResourceModel) TableName() string {
	return "menu_action_resource"
}

// backend后台menu_action
type MenuActionModel struct {
	Model
	MenuId string // 菜单id
	Code   string // 动作编号
	Name   string // 动作名称
}

func (MenuActionModel) TableName() string {
	return "menu_action"
}

// 小程序端用户
type UserModel struct {
	Model
	Openid   string // 微信openid
	Nickname string // 昵称
	Avatar   string // 头像
	Mobile   string // 手机号
	City     string // 城市编码
	Province string // 省份
	Country  string // 国家
	Gender   int    // 性别 0：未知、1：男、2：女
}

func (UserModel) TableName() string {
	return "user"
}

// 小程序-宫格
type GridCategoryModel struct {
	Model
	Title      string // 标题
	Name       string // 名称
	CategoryId int    // 分类ID
	Picture    string // 图标
	Del        int
}

func (GridCategoryModel) TableName() string {
	return "grid_category"
}

// 商城-规格
type SpecificationModel struct {
	Model
	Name        string // 名称
	Description string // 描述
	Unit        string // 单位
	Standard    int    // 是否标准
	Del         int
}

func (SpecificationModel) TableName() string {
	return "specification"
}

// 商城-规格属性表
type SpecificationAttrModel struct {
	Model
	SpecId int    // 规格主键
	Value  string // 规格值
	Extend string // 扩展
	Del    int
}

func (SpecificationAttrModel) TableName() string {
	return "specification_attr"
}

// 商城-商品
type GoodsModel struct {
	Model
	BrandName     string // 品牌
	Title         string // 标题
	Price         string // 价格
	DiscountPrice string // 折扣
	CategoryId    int    // 分类ID
	Online        int    // 是否上线
	Picture       string // 主图
	BannerPicture string // 详情图
	DetailPicture string // 轮播图
	Tags          string // 标签
	Description   string // 详情
	SaleNum       int    // 销量
	Del           int
}

func (GoodsModel) TableName() string {
	return "goods"
}

// 商城-商品规格
type GoodsSpecModel struct {
	Model
	GoodsId int // 商品ID
	SpecId  int // 规格ID
	Del     int
}

func (GoodsSpecModel) TableName() string {
	return "goods_spec"
}

// 商城-SKU
type SkuModel struct {
	Model
	Title   string // 标题
	Price   string // 价格
	Code    string // 编码
	Stock   int    // 库存量
	GoodsId int    // 商品ID
	Online  int    // 是否上线
	Picture string // 图片
	Specs   string // 多规格属性
	Del     int
}

func (SkuModel) TableName() string {
	return "sku"
}

// 商城-SKU规格属性
type SkuSpecAttrModel struct {
	Model
	SkuId      int
	SpecId     int
	AttrId     int
	Del        int
	CreateTime string
	UpdateTime string
}

func (SkuSpecAttrModel) TableName() string {
	return "sku_spec_attr"
}

// 商城-优惠券
type CouponModel struct {
	Model
	Title       string // 标题
	FullMoney   string // 满减额
	Minus       string // 优惠金额
	Rate        string // 折扣
	Type        int    // 类型
	GrantNum    int    // 发券数量
	LimitNum    int    // 领取数量
	StartTime   string // 开始时间
	EndTime     string // 截止时间
	Description string // 规则描述
	Online      int    // 是否上线
	Del         int
}

func (CouponModel) TableName() string {
	return "coupon"
}

// 商城-优惠券领取记录
type CouponLogModel struct {
	Model
	CouponId   int    // 优惠券ID
	UserId     int    // 用户ID
	UseTime    string // 核销时间
	ExpireTime string // 过期时间
	Status     int    // 状态：0-未使用 1-已使用 2-已过期
	Code       string // 券码
	OrderNo    string // 核销的订单号
	Del        int    // 是否删除
}

func (CouponLogModel) TableName() string {
	return "coupon_log"
}

// 商城-购物车
type UserCartModel struct {
	Model
	UserId  int // 用户ID
	GoodsId int // 商品ID
	SkuId   int // sku ID
	Num     int // 数量
	Del     int
}

func (UserCartModel) TableName() string {
	return "user_cart"
}

// 商城-用户收货地址
type UserAddressModel struct {
	Model
	UserId      int    // 用户ID
	Contacts    string // 联系人
	Mobile      string // 手机号
	ProvinceId  string // 省份编码
	CityId      string // 城市编码
	AreaId      string // 地区编码
	ProvinceStr string // 省份
	CityStr     string // 城市
	AreaStr     string // 地区
	Address     string // 详细地址
	IsDefault   int    // 默认收货地址：0-否 1-是
	Del         int
}

func (UserAddressModel) TableName() string {
	return "user_address"
}

// 商城-订单表
type OrderModel struct {
	Model
	OrderNo         string // 订单号
	UserId          int    // 用户ID
	PayAmount       string // 付款金额
	GoodsAmount     string // 商品小计
	DiscountAmount  string // 优惠金额
	DispatchAmount  string // 运费
	PayTime         string // 支付时间
	DeliverTime     string // 发货时间
	FinishTime      string // 完成时间
	Status          int    // 状态 -1 已取消 0-待付款 1-待发货 2-待收货 3-已完成 4-（待发货）退款申请 5-已退款
	AddressId       int    // 地址ID
	AddressSnapshot string // 地址快照
	WxappPrepayId   string // 微信预支付ID
	TransactionId   string // 微信支付单号
	Remark          string // 订单备注
	Del             int
}

func (OrderModel) TableName() string {
	return "order"
}

type OrderGoodsModel struct {
	Model
	OrderNo    string // 订单号
	UserId     int    // 用户ID
	GoodsId    int    // 商品ID
	SkuId      int    // sku ID
	Picture    string // 图片
	Title      string // 标题
	Price      string // 价格
	Specs      string // sku属性
	Num        int    // 数量
	LockStatus int    // 锁定状态：0-锁定 1-解锁
}

func (OrderGoodsModel) TableName() string {
	return "order_goods"
}

type OrderRefundModel struct {
	Model
	RefundNo     string // 退款编号
	UserId       int    // 用户ID
	OrderNo      string // 订单编号
	Reason       string // 退款原因
	RefundAmount string // 退款金额
	Status       int    // 状态：0-退款申请 1-商家处理申请 2-退款完成
	Del          int    // 是否删除：0-否 1-是
	RefundTime   string // 退款时间
}

func (OrderRefundModel) TableName() string {
	return "order_refund"
}

type GoodsBrowseRecordModel struct {
	Model
	UserId  int    // 用户ID
	GoodsId int    // 商品ID
	Picture string // 商品图片
	Title   string // 商品名称
	Price   string // 商品价格
	Del     int    // 是否删除：0-否 1-是
}

func (GoodsBrowseRecordModel) TableName() string {
	return "goods_browse_record"
}
